package com.xzmzhp.dao.finance;

import com.xzmzhp.dao.finance.SQL.FinanceTypeSql;
import com.xzmzhp.pojo.finance.FinanceType;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author 王源(xm)
 * @Date: 2021/10/13 10:11
 * @Description: 财务信息表操作类
 */
@Repository
public interface FinanceTypeMapper {

    /**
     * 根据id查询财务类型信息
     *
     * @param financeTypeId     财务类型id
     * @param financeTypeStatus 财务类别状态
     * @return 相关财务类型信息
     */
    @Select("select finance_type_id,finance_type_name,finance_type_status from finance_type where finance_type_id = #{financeTypeId} and finance_type_status = #{financeTypeStatus")
    FinanceType findFinanceTypeById(@Param("financeTypeId") Integer financeTypeId, @Param("financeTypeStatus") String financeTypeStatus);

    /**
     * 根据财务类型名称查询财务信息
     *
     * @param financeTypeName   财务类型名称
     * @param financeTypeStatus 财务类别状态
     * @return 相关财务类型信息
     */
    @SelectProvider(type = FinanceTypeSql.class, method = "findFinanceTypeByName")
    List<FinanceType> findFinanceTypeByName(@Param("financeTypeName") String financeTypeName, @Param("financeTypeStatus") String financeTypeStatus);

    /**
     * 根据财务类型名称查询财务信息
     *
     * @param financeTypeName 财务类型名称
     * @return 财务信息
     */
    @Select("select finance_type_id,finance_type_name,finance_type_status from finance_type where finance_type_name = #{financeTypeName}")
    FinanceType checkFinanceTypeByName(@Param("financeTypeName") String financeTypeName);

    /**
     * 查询所有财务类型信息
     *
     * @return 财务类型信息
     */
    @Select("select finance_type_id,finance_type_name,finance_type_status from finance_type")
    List<FinanceType> findFinanceType();

    /**
     * 添加财务类型信息
     *
     * @param financeType 财务类型信息
     * @return 影响行数
     */
    @Insert("insert into finance_type(finance_type_name,finance_type_status) values(#{financeTypeName},#{financeTypeStatus})")
    Integer addFinanceType(@Param("financeType") FinanceType financeType);

    /**
     * 修改财务类型信息
     *
     * @param financeType 财务类型
     * @return 影响条数
     */
    @UpdateProvider(type = FinanceTypeSql.class, method = "updateFinanceType")
    Integer updateFinanceType(@Param("financeType") FinanceType financeType);

    /**
     * 删除财务类型信息
     *
     * @param financeTypeId 财务类型id
     * @return 影响条数
     */
    @Delete("delete from finance_type where finance_type_id = #{financeTypeId}")
    Integer deleteFinanceType(@Param("financeTypeId") int financeTypeId);

}
